package com.xzy.sms.web.utils;

import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils	;

/**
 * @desc webroot初始化环境
 * @author WuJiangWu
 * @date 2018年7月15日
 */
public abstract class WebUtils {
    
    /** 默认编码 UTF-8 */
    public static final String DEFAULT_CHARSET = "UTF-8";
    /** web 应用上下文路径 */
    public static volatile String webAppContextPath = null;
    /** web 应用真实路径 */
    public static volatile String webAppRealPath = null;
    
    /** webRoot web 应用上下文路径 */
    public static void initWebRootOnce(String webRoot) {
        if (webAppContextPath == null) {
            webAppContextPath = webRoot;
        }
    }
    
    /** web 应用上下文路径 */
    public static String getWebRoot() {
        return webAppContextPath;
    }
    
    /** realPath web 应用真实路径  */
    public static void initWebRealPathOnce(String realPath) {
        if (webAppRealPath == null) {
            webAppRealPath = realPath;
        }
    }
    
    /** web 应用真实路径 */
    public static String getWebRealPath() {
        return webAppRealPath;
    }
    
    
    /**
     * 使用默认的UTF-8字符集反编码请求参数值。
     * @param value 参数值
     * @return 反编码后的参数值
     */
    public static String decode(String value) {
        return decode(value, DEFAULT_CHARSET);
    }
    
    /**
     * 使用默认的UTF-8字符集编码请求参数值。
     * @param value 参数值
     * @return 编码后的参数值
     */
    public static String encode(String value) {
        return encode(value, DEFAULT_CHARSET);
    }
    
    /**
     * 使用指定的字符集反编码请求参数值。
     * @param value 参数值
     * @param charset 字符集
     * @return 反编码后的参数值
     */
    public static String decode(String value, String charset) {
        String result = null;
        if (!StringUtils.isEmpty(value)) {
            try {
                result = URLDecoder.decode(value, charset);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return result;
    }
    
    /**
     * 使用指定的字符集编码请求参数值。
     * @param value 参数值
     * @param charset 字符集
     * @return 编码后的参数值
     */
    public static String encode(String value, String charset) {
        String result = null;
        if (!StringUtils.isEmpty(value)) {
            try {
                result = URLEncoder.encode(value, charset);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return result;
    }
    
    /**
     * 从URL中提取所有的参数。
     * @param query URL地址
     * @return 参数映射
     */
    public static Map<String, String> splitUrlQuery(String query) {
        Map<String, String> result = new HashMap<String, String>();
        
        String[] pairs = query.split("&");
        if (pairs != null && pairs.length > 0) {
            for (String pair : pairs) {
                String[] param = pair.split("=", 2);
                if (param != null && param.length == 2) {
                    result.put(param[0], param[1]);
                }
            }
        }
        return result;
    }
    
}
